package service

import (
	sqlc "bgs/db/sqlc"
	"context"
)

// GetStorePtr
func (s *StoreServiceImp) GetStorePtr(ctx context.Context, q *sqlc.Queries, storeID int64) (ptr *sqlc.Store, err error) {
	entity, err := q.GetStore(ctx, storeID)
	if err != nil {
		return
	}
	ptr = &entity
	return
}

// GetStorePtr
func (s *StoreServiceImp) GetStorePtrByDistributorID(ctx context.Context, q *sqlc.Queries, distributorID int64) (ptr *sqlc.Store, err error) {
	entity, err := q.GetStoreByDistributorID(ctx, sqlc.NInt64FromInt64(distributorID))
	if err != nil {
		return
	}
	ptr = &entity
	return
}

// GetStoreWithStatPtr
func (s *StoreServiceImp) GetStoreWithStatPtr(ctx context.Context, q *sqlc.Queries, storeID int64) (ptr *sqlc.GetStoreWithStatRow, err error) {
	entity, err := q.GetStoreWithStat(ctx, storeID)
	if err != nil {
		return
	}
	ptr = &entity
	return
}

// GetStoreWithStatAndAccountPtr
func (s *StoreServiceImp) GetStoreWithStatAndAccountPtr(ctx context.Context, q *sqlc.Queries, storeID int64) (ptr *sqlc.GetStoreWithStatAndAccountRow, err error) {
	entity, err := q.GetStoreWithStatAndAccount(ctx, storeID)
	if err != nil {
		return
	}
	ptr = &entity
	return
}

// GetStoreWithStatAndEndorsementPtrForUser
func (s *StoreServiceImp) GetStoreWithStatAndEndorsementPtrForUser(ctx context.Context, q *sqlc.Queries, storeID, userID int64) (ptr *sqlc.GetStoreWithStatAndEndorsementForUserRow, err error) {
	entity, err := q.GetStoreWithStatAndEndorsementForUser(ctx, sqlc.GetStoreWithStatAndEndorsementForUserParams{
		ID: storeID,
		UserID: userID,
	})
	if err != nil {
		return
	}
	ptr = &entity
	return
}

// GetStoreOwner
func (s *StoreServiceImp) GetStoreOwner(ctx context.Context, q *sqlc.Queries, storeID int64) (userID int64, err error) {
	store, err := q.GetStore(ctx, storeID)
	if err != nil {
		return
	}
	if !store.DistributorID.Valid {
		return
	}
	distributorID := store.DistributorID.Int64
	distributor, err := q.GetBrandDistributor(ctx, distributorID)
	if err != nil {
		return
	}
	userID = distributor.UserID
	return
}
